[INFO] cloning repository https://github.com/sudokatie/hollow
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/sudokatie/hollow" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsudokatie%2Fhollow", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsudokatie%2Fhollow'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] b2e61cebd02289fe1982fece774ee9be769f4247
[INFO] testing sudokatie/hollow against master#1f7f8ea0721a3b1eb73e6c6d25cccb371434b320 for pr-154065-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsudokatie%2Fhollow" "/workspace/builds/worker-0-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/sudokatie/hollow
[INFO] finished tweaking git repo https://github.com/sudokatie/hollow
[INFO] tweaked toml for git repo https://github.com/sudokatie/hollow written to /workspace/builds/worker-0-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/sudokatie/hollow on toolchain 1f7f8ea0721a3b1eb73e6c6d25cccb371434b320
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/sudokatie/hollow already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded pulldown-cmark-escape v0.10.1
[INFO] [stderr]   Downloaded rle v0.2.0
[INFO] [stderr]   Downloaded crc-catalog v1.1.1
[INFO] [stderr]   Downloaded str_indices v0.4.4
[INFO] [stderr]   Downloaded ropey v1.6.1
[INFO] [stderr]   Downloaded content-tree v0.2.0
[INFO] [stderr]   Downloaded pulldown-cmark v0.10.3
[INFO] [stderr]   Downloaded diamond-types v1.0.0
[INFO] [stderr]   Downloaded str_indices v0.3.2
[INFO] [stderr]   Downloaded jumprope v1.1.2
[INFO] [stderr]   Downloaded spellbook v0.4.0
[INFO] [stderr]   Downloaded crc v2.1.0
[INFO] [stderr]   Downloaded libz-sys v1.1.25
[INFO] [stderr]   Downloaded lz4_flex v0.9.5
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] c51a8b0248bd8217520918dd91d59657beab8b6391e036ef1cb4613d32520890
[INFO] running `Command { std: "docker" "start" "-a" "c51a8b0248bd8217520918dd91d59657beab8b6391e036ef1cb4613d32520890", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "c51a8b0248bd8217520918dd91d59657beab8b6391e036ef1cb4613d32520890", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "c51a8b0248bd8217520918dd91d59657beab8b6391e036ef1cb4613d32520890", kill_on_drop: false }`
[INFO] [stdout] c51a8b0248bd8217520918dd91d59657beab8b6391e036ef1cb4613d32520890
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] d055525c1ae6e281f571b8b0692ed4b627f11857847a79a96ba470e1bbeeda7d
[INFO] running `Command { std: "docker" "start" "-a" "d055525c1ae6e281f571b8b0692ed4b627f11857847a79a96ba470e1bbeeda7d", kill_on_drop: false }`
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling zerocopy v0.8.39
[INFO] [stderr]    Compiling bitflags v2.10.0
[INFO] [stderr]    Compiling log v0.4.29
[INFO] [stderr]    Compiling syn v2.0.114
[INFO] [stderr]    Compiling jobserver v0.1.34
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]    Compiling once_cell v1.21.3
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling smartstring v1.0.1
[INFO] [stderr]    Compiling instability v0.3.11
[INFO] [stderr]    Compiling percent-encoding v2.3.2
[INFO] [stderr]    Compiling str_indices v0.4.4
[INFO] [stderr]    Compiling mio v1.1.1
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling twox-hash v1.6.3
[INFO] [stderr]    Compiling toml_edit v0.19.15
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling rle v0.2.0
[INFO] [stderr]    Compiling unicode-width v0.2.2
[INFO] [stderr]    Compiling crc-catalog v1.1.1
[INFO] [stderr]    Compiling signal-hook-mio v0.2.5
[INFO] [stderr]    Compiling humansize v1.1.1
[INFO] [stderr]    Compiling option-ext v0.2.0
[INFO] [stderr]    Compiling cc v1.2.55
[INFO] [stderr]    Compiling pulldown-cmark v0.10.3
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling indoc v2.0.7
[INFO] [stderr]    Compiling dirs-sys v0.4.1
[INFO] [stderr]    Compiling crc v2.1.0
[INFO] [stderr]    Compiling content-tree v0.2.0
[INFO] [stderr]    Compiling lz4_flex v0.9.5
[INFO] [stderr]    Compiling crossterm v0.28.1
[INFO] [stderr]    Compiling getopts v0.2.24
[INFO] [stderr]    Compiling compact_str v0.8.1
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling socket2 v0.6.3
[INFO] [stderr]    Compiling unsafe-libyaml v0.2.11
[INFO] [stderr]    Compiling pulldown-cmark-escape v0.10.1
[INFO] [stderr]    Compiling fallible-streaming-iterator v0.1.9
[INFO] [stderr]    Compiling fallible-iterator v0.3.0
[INFO] [stderr]    Compiling str_indices v0.3.2
[INFO] [stderr]    Compiling uuid v1.22.0
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling chrono v0.4.43
[INFO] [stderr]    Compiling dirs v5.0.1
[INFO] [stderr]    Compiling ropey v1.6.1
[INFO] [stderr]    Compiling spellbook v0.4.0
[INFO] [stderr]    Compiling whoami v1.6.1
[INFO] [stderr]    Compiling proc-macro-crate v1.3.1
[INFO] [stderr]    Compiling unicode-truncate v1.1.0
[INFO] [stderr]    Compiling openssl-sys v0.9.112
[INFO] [stderr]    Compiling libz-sys v1.1.25
[INFO] [stderr]    Compiling libssh2-sys v0.3.1
[INFO] [stderr]    Compiling libgit2-sys v0.17.0+1.8.1
[INFO] [stderr]    Compiling libsqlite3-sys v0.28.0
[INFO] [stderr]    Compiling num_enum_derive v0.5.11
[INFO] [stderr]    Compiling num_enum v0.5.11
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]    Compiling hashbrown v0.14.5
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling darling_core v0.23.0
[INFO] [stderr]    Compiling hashlink v0.9.1
[INFO] [stderr]    Compiling zerovec-derive v0.11.2
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.8.1
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling strum_macros v0.26.4
[INFO] [stderr]    Compiling tokio-macros v2.6.1
[INFO] [stderr]    Compiling jumprope v1.1.2
[INFO] [stderr]    Compiling tokio v1.50.0
[INFO] [stderr]    Compiling zerofrom v0.1.6
[INFO] [stderr]    Compiling strum v0.26.3
[INFO] [stderr]    Compiling diamond-types v1.0.0
[INFO] [stderr]    Compiling yoke v0.8.1
[INFO] [stderr]    Compiling zerovec v0.11.5
[INFO] [stderr]    Compiling zerotrie v0.2.3
[INFO] [stderr]    Compiling darling_macro v0.23.0
[INFO] [stderr]    Compiling tinystr v0.8.2
[INFO] [stderr]    Compiling potential_utf v0.1.4
[INFO] [stderr]    Compiling icu_collections v2.1.1
[INFO] [stderr]    Compiling icu_locale_core v2.1.1
[INFO] [stderr]    Compiling darling v0.23.0
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling ratatui v0.28.1
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling serde_yaml v0.9.34+deprecated
[INFO] [stderr]    Compiling icu_provider v2.1.1
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling icu_normalizer v2.1.1
[INFO] [stderr]    Compiling icu_properties v2.1.2
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling git2 v0.19.0
[INFO] [stderr]    Compiling rusqlite v0.31.0
[INFO] [stderr]    Compiling hollow v0.1.2 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `CollabDocument`, `OperationType`, and `Operation`
[INFO] [stdout]   --> src/collab/mod.rs:12:16
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub use crdt::{CollabDocument, Operation, OperationType};
[INFO] [stdout]    |                ^^^^^^^^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DEFAULT_PORT`, `NetworkClient`, `NetworkEvent`, `NetworkServer`, and `PeerMessage`
[INFO] [stdout]   --> src/collab/mod.rs:13:19
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub use network::{NetworkClient, NetworkEvent, NetworkServer, PeerMessage, DEFAULT_PORT};
[INFO] [stdout]    |                   ^^^^^^^^^^^^^  ^^^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CursorPosition`, `PresenceManager`, and `Selection`
[INFO] [stdout]   --> src/collab/mod.rs:15:18
[INFO] [stdout]    |
[INFO] [stdout] 15 |     CursorColor, CursorPosition, PeerCursor, PresenceManager, Selection, PEER_COLORS,
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^              ^^^^^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CollabSession`, `PeerInfo`, `SessionConfig`, and `SessionState`
[INFO] [stdout]   --> src/collab/mod.rs:17:19
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub use session::{CollabSession, PeerInfo, SessionConfig, SessionState};
[INFO] [stdout]    |                   ^^^^^^^^^^^^^  ^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CollabSync` and `OpBatcher`
[INFO] [stdout]   --> src/collab/mod.rs:18:28
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub use sync::{CollabMode, CollabSync, OpBatcher};
[INFO] [stdout]    |                            ^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `OperationType` is never used
[INFO] [stdout]   --> src/collab/crdt.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum OperationType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Operation` is never constructed
[INFO] [stdout]   --> src/collab/crdt.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct Operation {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CollabDocument` is never constructed
[INFO] [stdout]   --> src/collab/crdt.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct CollabDocument {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/collab/crdt.rs:44:12
[INFO] [stdout]     |
[INFO] [stdout]  42 | impl CollabDocument {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout]  43 |     /// Create a new empty collaborative document.
[INFO] [stdout]  44 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  53 |     pub fn with_content(initial: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     pub fn content(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  67 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  72 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub fn insert(&mut self, pos: usize, text: &str) -> Operation {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub fn delete(&mut self, pos: usize, len: usize) -> Option<Operation> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fn apply_remote(&mut self, op: &Operation) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 133 |     pub fn version(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub fn operations_since(&self, _since_version: u64) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_PORT` is never used
[INFO] [stdout]   --> src/collab/network.rs:20:11
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub const DEFAULT_PORT: u16 = 7878;
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PeerMessage` is never used
[INFO] [stdout]   --> src/collab/network.rs:24:10
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub enum PeerMessage {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `to_json_line` and `from_json` are never used
[INFO] [stdout]   --> src/collab/network.rs:56:12
[INFO] [stdout]    |
[INFO] [stdout] 54 | impl PeerMessage {
[INFO] [stdout]    | ---------------- associated items in this implementation
[INFO] [stdout] 55 |     /// Serialize to JSON line (newline-delimited).
[INFO] [stdout] 56 |     pub fn to_json_line(&self) -> Result<String, serde_json::Error> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn from_json(json: &str) -> Result<Self, serde_json::Error> {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `NetworkEvent` is never used
[INFO] [stdout]   --> src/collab/network.rs:70:10
[INFO] [stdout]    |
[INFO] [stdout] 70 | pub enum NetworkEvent {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PeerConnection` is never constructed
[INFO] [stdout]   --> src/collab/network.rs:89:8
[INFO] [stdout]    |
[INFO] [stdout] 89 | struct PeerConnection {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NetworkServer` is never constructed
[INFO] [stdout]   --> src/collab/network.rs:95:12
[INFO] [stdout]    |
[INFO] [stdout] 95 | pub struct NetworkServer {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/collab/network.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 112 | impl NetworkServer {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 113 |     /// Create a new network server.
[INFO] [stdout] 114 |     pub fn new(
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub async fn set_document(&self, content: String) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub async fn peer_count(&self) -> usize {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub async fn start(&mut self, port: u16) -> io::Result<SocketAddr> {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub fn stop(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub fn broadcast(&self, msg: PeerMessage) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     pub fn send_operation(&self, op: Operation) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 208 |     pub fn send_cursor(&self, position: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 215 |     fn handle_connection(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 242 |     async fn run_connection(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NetworkClient` is never constructed
[INFO] [stdout]    --> src/collab/network.rs:376:12
[INFO] [stdout]     |
[INFO] [stdout] 376 | pub struct NetworkClient {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `connect`, `disconnect`, `send_operation`, `send_cursor`, and `is_connected` are never used
[INFO] [stdout]    --> src/collab/network.rs:389:12
[INFO] [stdout]     |
[INFO] [stdout] 387 | impl NetworkClient {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 388 |     /// Create a new network client.
[INFO] [stdout] 389 |     pub fn new(local_peer: PeerInfo, event_tx: mpsc::Sender<NetworkEvent>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 399 |     pub async fn connect(&mut self, addr: &str, session_id: &str) -> io::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 503 |     pub fn disconnect(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 511 |     pub async fn send_operation(&self, op: Operation) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 518 |     pub async fn send_cursor(&self, position: usize) {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 530 |     pub fn is_connected(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CursorPosition` is never constructed
[INFO] [stdout]   --> src/collab/presence.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct CursorPosition {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `new`, `from_offset`, and `from_offset_in_text` are never used
[INFO] [stdout]   --> src/collab/presence.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl CursorPosition {
[INFO] [stdout]    | ------------------- associated functions in this implementation
[INFO] [stdout] 23 |     /// Create a new cursor position.
[INFO] [stdout] 24 |     pub fn new(line: usize, column: usize, offset: usize) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn from_offset(offset: usize) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 38 |     pub fn from_offset_in_text(offset: usize, text: &str) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Selection` is never constructed
[INFO] [stdout]   --> src/collab/presence.rs:67:12
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub struct Selection {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `is_empty`, `len`, and `normalized` are never used
[INFO] [stdout]   --> src/collab/presence.rs:76:12
[INFO] [stdout]    |
[INFO] [stdout] 74 | impl Selection {
[INFO] [stdout]    | -------------- associated items in this implementation
[INFO] [stdout] 75 |     /// Create a new selection.
[INFO] [stdout] 76 |     pub fn new(start: CursorPosition, end: CursorPosition) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     pub fn len(&self) -> usize {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 95 |     pub fn normalized(&self) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CursorColor` is never constructed
[INFO] [stdout]    --> src/collab/presence.rs:109:12
[INFO] [stdout]     |
[INFO] [stdout] 109 | pub struct CursorColor {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `to_ansi256`, and `contrasting_text` are never used
[INFO] [stdout]    --> src/collab/presence.rs:120:18
[INFO] [stdout]     |
[INFO] [stdout] 118 | impl CursorColor {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] 119 |     /// Create a new color.
[INFO] [stdout] 120 |     pub const fn new(r: u8, g: u8, b: u8) -> Self {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     pub fn to_ansi256(&self) -> u8 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 134 |     pub fn contrasting_text(&self) -> CursorColor {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PEER_COLORS` is never used
[INFO] [stdout]    --> src/collab/presence.rs:146:11
[INFO] [stdout]     |
[INFO] [stdout] 146 | pub const PEER_COLORS: [CursorColor; 8] = [
[INFO] [stdout]     |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_peer_color` is never used
[INFO] [stdout]    --> src/collab/presence.rs:158:8
[INFO] [stdout]     |
[INFO] [stdout] 158 | pub fn get_peer_color(index: usize) -> CursorColor {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PeerCursor` is never constructed
[INFO] [stdout]    --> src/collab/presence.rs:164:12
[INFO] [stdout]     |
[INFO] [stdout] 164 | pub struct PeerCursor {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `update_position`, `update_selection`, `is_stale`, and `check_visibility` are never used
[INFO] [stdout]    --> src/collab/presence.rs:183:12
[INFO] [stdout]     |
[INFO] [stdout] 181 | impl PeerCursor {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 182 |     /// Create a new peer cursor.
[INFO] [stdout] 183 |     pub fn new(peer_id: String, name: String, color_index: usize) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     pub fn update_position(&mut self, position: CursorPosition) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     pub fn update_selection(&mut self, selection: Option<Selection>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn is_stale(&self, timeout: Duration) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 214 |     pub fn check_visibility(&mut self, timeout: Duration) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PresenceManager` is never constructed
[INFO] [stdout]    --> src/collab/presence.rs:222:12
[INFO] [stdout]     |
[INFO] [stdout] 222 | pub struct PresenceManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/collab/presence.rs:241:12
[INFO] [stdout]     |
[INFO] [stdout] 239 | impl PresenceManager {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] 240 |     /// Create a new presence manager.
[INFO] [stdout] 241 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 254 |     pub fn local_position(&self) -> CursorPosition {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |     pub fn local_selection(&self) -> Option<Selection> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 265 |     pub fn update_local(&mut self, position: CursorPosition) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 278 |     pub fn update_local_selection(&mut self, selection: Option<Selection>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 283 |     pub fn force_broadcast(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 288 |     pub fn add_peer(&mut self, peer_id: String, name: String) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 298 |     pub fn remove_peer(&mut self, peer_id: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 303 |     pub fn update_peer(&mut self, peer_id: &str, offset: usize, text: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 311 |     pub fn update_peer_position(&mut self, peer_id: &str, position: CursorPosition) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 318 |     pub fn visible_peers(&self) -> Vec<&PeerCursor> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 323 |     pub fn all_peers(&self) -> Vec<&PeerCursor> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 328 |     pub fn get_peer(&self, peer_id: &str) -> Option<&PeerCursor> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 333 |     pub fn peer_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 338 |     pub fn update_visibility(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 345 |     pub fn cursors_on_line(&self, line: usize) -> Vec<&PeerCursor> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 353 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SessionState` is never used
[INFO] [stdout]   --> src/collab/session.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum SessionState {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PeerInfo` is never constructed
[INFO] [stdout]   --> src/collab/session.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct PeerInfo {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SessionConfig` is never constructed
[INFO] [stdout]   --> src/collab/session.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub struct SessionConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CollabSession` is never constructed
[INFO] [stdout]   --> src/collab/session.rs:58:12
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub struct CollabSession {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/collab/session.rs:71:12
[INFO] [stdout]     |
[INFO] [stdout]  69 | impl CollabSession {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  70 |     /// Create a new disconnected session.
[INFO] [stdout]  71 |     pub fn new(name: &str) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  91 |     pub fn state(&self) -> SessionState {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub fn is_active(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn session_id(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn peers(&self) -> &[PeerInfo] {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn peer_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fn local_peer(&self) -> &PeerInfo {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 121 |     pub fn update_cursor(&mut self, pos: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn host(&mut self) -> String {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn join(&mut self, session_id: &str) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub fn on_connected(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 146 |     pub fn on_peer_joined(&mut self, peer: PeerInfo) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     pub fn on_peer_left(&mut self, peer_id: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 160 |     pub fn on_peer_cursor(&mut self, peer_id: &str, pos: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     pub fn disconnect(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_session_id` is never used
[INFO] [stdout]    --> src/collab/session.rs:175:4
[INFO] [stdout]     |
[INFO] [stdout] 175 | fn generate_session_id() -> String {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CollabMode` is never used
[INFO] [stdout]   --> src/collab/sync.rs:15:10
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub enum CollabMode {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CollabSync` is never constructed
[INFO] [stdout]   --> src/collab/sync.rs:26:12
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct CollabSync {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/collab/sync.rs:49:12
[INFO] [stdout]     |
[INFO] [stdout]  47 | impl CollabSync {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]  48 |     /// Create a new collaboration sync handler.
[INFO] [stdout]  49 |     pub fn new(name: &str) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  65 |     pub fn mode(&self) -> CollabMode {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  70 |     pub fn is_active(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  75 |     pub fn session(&self) -> &CollabSession {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  80 |     pub fn session_mut(&mut self) -> &mut CollabSession {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn document(&self) -> &Arc<RwLock<CollabDocument>> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub async fn host(&mut self, content: &str) -> std::io::Result<String> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  95 |     pub async fn host_on_port(&mut self, content: &str, port: u16) -> std::io::Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 134 |     pub async fn join(&mut self, addr: &str, session_id: &str) -> std::io::Result<()> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 151 |     pub fn disconnect(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     pub async fn local_insert(&mut self, pos: usize, text: &str) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub async fn local_delete(&mut self, pos: usize, len: usize) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 186 |     pub async fn apply_remote(&mut self, op: Operation) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn update_cursor(&mut self, pos: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     pub fn broadcast_cursor(&self, pos: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 220 |     async fn broadcast_operation(&self, op: Operation) {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 237 |     pub fn take_event_receiver(&mut self) -> Option<mpsc::Receiver<NetworkEvent>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 242 |     pub async fn handle_event(&mut self, event: NetworkEvent) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 272 |     pub async fn content(&self) -> String {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 278 |     pub fn peer_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 283 |     pub fn peers(&self) -> &[PeerInfo] {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OpBatcher` is never constructed
[INFO] [stdout]    --> src/collab/sync.rs:289:12
[INFO] [stdout]     |
[INFO] [stdout] 289 | pub struct OpBatcher {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `add`, `should_flush`, `flush`, `pending`, and `compact` are never used
[INFO] [stdout]    --> src/collab/sync.rs:302:12
[INFO] [stdout]     |
[INFO] [stdout] 300 | impl OpBatcher {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] 301 |     /// Create a new operation batcher.
[INFO] [stdout] 302 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 312 |     pub fn add(&mut self, op: Operation) {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 317 |     pub fn should_flush(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 324 |     pub fn flush(&mut self) -> Vec<Operation> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 330 |     pub fn pending(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 335 |     pub fn compact(&mut self) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CollabRenderState` is never constructed
[INFO] [stdout]   --> src/collab_ui.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct CollabRenderState {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PeerDisplay` is never constructed
[INFO] [stdout]   --> src/collab_ui.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct PeerDisplay {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_collab_status` is never used
[INFO] [stdout]   --> src/collab_ui.rs:65:8
[INFO] [stdout]    |
[INFO] [stdout] 65 | pub fn render_collab_status(state: &CollabRenderState) -> Vec<Span<'static>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_peer_list` is never used
[INFO] [stdout]    --> src/collab_ui.rs:106:8
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub fn render_peer_list(frame: &mut Frame, state: &CollabRenderState) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_host_dialog` is never used
[INFO] [stdout]    --> src/collab_ui.rs:158:8
[INFO] [stdout]     |
[INFO] [stdout] 158 | pub fn render_host_dialog(frame: &mut Frame, session_id: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_join_dialog` is never used
[INFO] [stdout]    --> src/collab_ui.rs:203:8
[INFO] [stdout]     |
[INFO] [stdout] 203 | pub fn render_join_dialog(frame: &mut Frame, input: &str, status: Option<&str>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_remote_cursors` is never used
[INFO] [stdout]    --> src/collab_ui.rs:250:8
[INFO] [stdout]     |
[INFO] [stdout] 250 | pub fn render_remote_cursors(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_next_peer_color` is never used
[INFO] [stdout]    --> src/collab_ui.rs:303:8
[INFO] [stdout]     |
[INFO] [stdout] 303 | pub fn get_next_peer_color(peer_index: usize) -> CursorColor {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `centered_rect` is never used
[INFO] [stdout]    --> src/collab_ui.rs:308:4
[INFO] [stdout]     |
[INFO] [stdout] 308 | fn centered_rect(percent_x: u16, percent_y: u16, area: Rect) -> Rect {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `CollabHost`, `CollabJoin`, and `CollabDisconnect` are never constructed
[INFO] [stdout]   --> src/input.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub enum Action {
[INFO] [stdout]    |          ------ variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 49 |     CollabHost,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 50 |     CollabJoin,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 51 |     CollabDisconnect,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Action` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 53.96s
[INFO] running `Command { std: "docker" "inspect" "d055525c1ae6e281f571b8b0692ed4b627f11857847a79a96ba470e1bbeeda7d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "d055525c1ae6e281f571b8b0692ed4b627f11857847a79a96ba470e1bbeeda7d", kill_on_drop: false }`
[INFO] [stdout] d055525c1ae6e281f571b8b0692ed4b627f11857847a79a96ba470e1bbeeda7d
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] b370fe577205db1c4206204af193aca40180a04bdaeb976d1716926352acc486
[INFO] running `Command { std: "docker" "start" "-a" "b370fe577205db1c4206204af193aca40180a04bdaeb976d1716926352acc486", kill_on_drop: false }`
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]    Compiling rustix v1.1.3
[INFO] [stderr]    Compiling hashbrown v0.14.5
[INFO] [stderr]    Compiling hashlink v0.9.1
[INFO] [stderr]    Compiling rusqlite v0.31.0
[INFO] [stderr]    Compiling tempfile v3.24.0
[INFO] [stderr]    Compiling hollow v0.1.2 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `CollabDocument`, `OperationType`, and `Operation`
[INFO] [stdout]   --> src/collab/mod.rs:12:16
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub use crdt::{CollabDocument, Operation, OperationType};
[INFO] [stdout]    |                ^^^^^^^^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DEFAULT_PORT`, `NetworkClient`, `NetworkEvent`, `NetworkServer`, and `PeerMessage`
[INFO] [stdout]   --> src/collab/mod.rs:13:19
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub use network::{NetworkClient, NetworkEvent, NetworkServer, PeerMessage, DEFAULT_PORT};
[INFO] [stdout]    |                   ^^^^^^^^^^^^^  ^^^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CursorPosition`, `PresenceManager`, and `Selection`
[INFO] [stdout]   --> src/collab/mod.rs:15:18
[INFO] [stdout]    |
[INFO] [stdout] 15 |     CursorColor, CursorPosition, PeerCursor, PresenceManager, Selection, PEER_COLORS,
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^              ^^^^^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CollabSession`, `PeerInfo`, `SessionConfig`, and `SessionState`
[INFO] [stdout]   --> src/collab/mod.rs:17:19
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub use session::{CollabSession, PeerInfo, SessionConfig, SessionState};
[INFO] [stdout]    |                   ^^^^^^^^^^^^^  ^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CollabSync` and `OpBatcher`
[INFO] [stdout]   --> src/collab/mod.rs:18:28
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub use sync::{CollabMode, CollabSync, OpBatcher};
[INFO] [stdout]    |                            ^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CollabDocument`, `OperationType`, and `Operation`
[INFO] [stdout]   --> src/collab/mod.rs:12:16
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub use crdt::{CollabDocument, Operation, OperationType};
[INFO] [stdout]    |                ^^^^^^^^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DEFAULT_PORT`, `NetworkClient`, `NetworkEvent`, `NetworkServer`, and `PeerMessage`
[INFO] [stdout]   --> src/collab/mod.rs:13:19
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub use network::{NetworkClient, NetworkEvent, NetworkServer, PeerMessage, DEFAULT_PORT};
[INFO] [stdout]    |                   ^^^^^^^^^^^^^  ^^^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CursorPosition`, `PresenceManager`, and `Selection`
[INFO] [stdout]   --> src/collab/mod.rs:15:18
[INFO] [stdout]    |
[INFO] [stdout] 15 |     CursorColor, CursorPosition, PeerCursor, PresenceManager, Selection, PEER_COLORS,
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^              ^^^^^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CollabSession`, `PeerInfo`, `SessionConfig`, and `SessionState`
[INFO] [stdout]   --> src/collab/mod.rs:17:19
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub use session::{CollabSession, PeerInfo, SessionConfig, SessionState};
[INFO] [stdout]    |                   ^^^^^^^^^^^^^  ^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CollabSync` and `OpBatcher`
[INFO] [stdout]   --> src/collab/mod.rs:18:28
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub use sync::{CollabMode, CollabSync, OpBatcher};
[INFO] [stdout]    |                            ^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `OperationType` is never used
[INFO] [stdout]   --> src/collab/crdt.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum OperationType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Operation` is never constructed
[INFO] [stdout]   --> src/collab/crdt.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct Operation {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CollabDocument` is never constructed
[INFO] [stdout]   --> src/collab/crdt.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct CollabDocument {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/collab/crdt.rs:44:12
[INFO] [stdout]     |
[INFO] [stdout]  42 | impl CollabDocument {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout]  43 |     /// Create a new empty collaborative document.
[INFO] [stdout]  44 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  53 |     pub fn with_content(initial: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     pub fn content(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  67 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  72 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub fn insert(&mut self, pos: usize, text: &str) -> Operation {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub fn delete(&mut self, pos: usize, len: usize) -> Option<Operation> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fn apply_remote(&mut self, op: &Operation) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 133 |     pub fn version(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub fn operations_since(&self, _since_version: u64) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_PORT` is never used
[INFO] [stdout]   --> src/collab/network.rs:20:11
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub const DEFAULT_PORT: u16 = 7878;
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PeerMessage` is never used
[INFO] [stdout]   --> src/collab/network.rs:24:10
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub enum PeerMessage {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `to_json_line` and `from_json` are never used
[INFO] [stdout]   --> src/collab/network.rs:56:12
[INFO] [stdout]    |
[INFO] [stdout] 54 | impl PeerMessage {
[INFO] [stdout]    | ---------------- associated items in this implementation
[INFO] [stdout] 55 |     /// Serialize to JSON line (newline-delimited).
[INFO] [stdout] 56 |     pub fn to_json_line(&self) -> Result<String, serde_json::Error> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn from_json(json: &str) -> Result<Self, serde_json::Error> {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `NetworkEvent` is never used
[INFO] [stdout]   --> src/collab/network.rs:70:10
[INFO] [stdout]    |
[INFO] [stdout] 70 | pub enum NetworkEvent {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PeerConnection` is never constructed
[INFO] [stdout]   --> src/collab/network.rs:89:8
[INFO] [stdout]    |
[INFO] [stdout] 89 | struct PeerConnection {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NetworkServer` is never constructed
[INFO] [stdout]   --> src/collab/network.rs:95:12
[INFO] [stdout]    |
[INFO] [stdout] 95 | pub struct NetworkServer {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/collab/network.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 112 | impl NetworkServer {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 113 |     /// Create a new network server.
[INFO] [stdout] 114 |     pub fn new(
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub async fn set_document(&self, content: String) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub async fn peer_count(&self) -> usize {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub async fn start(&mut self, port: u16) -> io::Result<SocketAddr> {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub fn stop(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub fn broadcast(&self, msg: PeerMessage) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     pub fn send_operation(&self, op: Operation) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 208 |     pub fn send_cursor(&self, position: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 215 |     fn handle_connection(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 242 |     async fn run_connection(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NetworkClient` is never constructed
[INFO] [stdout]    --> src/collab/network.rs:376:12
[INFO] [stdout]     |
[INFO] [stdout] 376 | pub struct NetworkClient {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `connect`, `disconnect`, `send_operation`, `send_cursor`, and `is_connected` are never used
[INFO] [stdout]    --> src/collab/network.rs:389:12
[INFO] [stdout]     |
[INFO] [stdout] 387 | impl NetworkClient {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 388 |     /// Create a new network client.
[INFO] [stdout] 389 |     pub fn new(local_peer: PeerInfo, event_tx: mpsc::Sender<NetworkEvent>) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 399 |     pub async fn connect(&mut self, addr: &str, session_id: &str) -> io::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 503 |     pub fn disconnect(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 511 |     pub async fn send_operation(&self, op: Operation) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 518 |     pub async fn send_cursor(&self, position: usize) {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 530 |     pub fn is_connected(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CursorPosition` is never constructed
[INFO] [stdout]   --> src/collab/presence.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct CursorPosition {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `new`, `from_offset`, and `from_offset_in_text` are never used
[INFO] [stdout]   --> src/collab/presence.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl CursorPosition {
[INFO] [stdout]    | ------------------- associated functions in this implementation
[INFO] [stdout] 23 |     /// Create a new cursor position.
[INFO] [stdout] 24 |     pub fn new(line: usize, column: usize, offset: usize) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn from_offset(offset: usize) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 38 |     pub fn from_offset_in_text(offset: usize, text: &str) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Selection` is never constructed
[INFO] [stdout]   --> src/collab/presence.rs:67:12
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub struct Selection {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `is_empty`, `len`, and `normalized` are never used
[INFO] [stdout]   --> src/collab/presence.rs:76:12
[INFO] [stdout]    |
[INFO] [stdout] 74 | impl Selection {
[INFO] [stdout]    | -------------- associated items in this implementation
[INFO] [stdout] 75 |     /// Create a new selection.
[INFO] [stdout] 76 |     pub fn new(start: CursorPosition, end: CursorPosition) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     pub fn len(&self) -> usize {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 95 |     pub fn normalized(&self) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CursorColor` is never constructed
[INFO] [stdout]    --> src/collab/presence.rs:109:12
[INFO] [stdout]     |
[INFO] [stdout] 109 | pub struct CursorColor {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `to_ansi256`, and `contrasting_text` are never used
[INFO] [stdout]    --> src/collab/presence.rs:120:18
[INFO] [stdout]     |
[INFO] [stdout] 118 | impl CursorColor {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] 119 |     /// Create a new color.
[INFO] [stdout] 120 |     pub const fn new(r: u8, g: u8, b: u8) -> Self {
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     pub fn to_ansi256(&self) -> u8 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 134 |     pub fn contrasting_text(&self) -> CursorColor {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PEER_COLORS` is never used
[INFO] [stdout]    --> src/collab/presence.rs:146:11
[INFO] [stdout]     |
[INFO] [stdout] 146 | pub const PEER_COLORS: [CursorColor; 8] = [
[INFO] [stdout]     |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_peer_color` is never used
[INFO] [stdout]    --> src/collab/presence.rs:158:8
[INFO] [stdout]     |
[INFO] [stdout] 158 | pub fn get_peer_color(index: usize) -> CursorColor {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PeerCursor` is never constructed
[INFO] [stdout]    --> src/collab/presence.rs:164:12
[INFO] [stdout]     |
[INFO] [stdout] 164 | pub struct PeerCursor {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `update_position`, `update_selection`, `is_stale`, and `check_visibility` are never used
[INFO] [stdout]    --> src/collab/presence.rs:183:12
[INFO] [stdout]     |
[INFO] [stdout] 181 | impl PeerCursor {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 182 |     /// Create a new peer cursor.
[INFO] [stdout] 183 |     pub fn new(peer_id: String, name: String, color_index: usize) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     pub fn update_position(&mut self, position: CursorPosition) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     pub fn update_selection(&mut self, selection: Option<Selection>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn is_stale(&self, timeout: Duration) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 214 |     pub fn check_visibility(&mut self, timeout: Duration) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PresenceManager` is never constructed
[INFO] [stdout]    --> src/collab/presence.rs:222:12
[INFO] [stdout]     |
[INFO] [stdout] 222 | pub struct PresenceManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/collab/presence.rs:241:12
[INFO] [stdout]     |
[INFO] [stdout] 239 | impl PresenceManager {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] 240 |     /// Create a new presence manager.
[INFO] [stdout] 241 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 254 |     pub fn local_position(&self) -> CursorPosition {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |     pub fn local_selection(&self) -> Option<Selection> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 265 |     pub fn update_local(&mut self, position: CursorPosition) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 278 |     pub fn update_local_selection(&mut self, selection: Option<Selection>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 283 |     pub fn force_broadcast(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 288 |     pub fn add_peer(&mut self, peer_id: String, name: String) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 298 |     pub fn remove_peer(&mut self, peer_id: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 303 |     pub fn update_peer(&mut self, peer_id: &str, offset: usize, text: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 311 |     pub fn update_peer_position(&mut self, peer_id: &str, position: CursorPosition) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 318 |     pub fn visible_peers(&self) -> Vec<&PeerCursor> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 323 |     pub fn all_peers(&self) -> Vec<&PeerCursor> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 328 |     pub fn get_peer(&self, peer_id: &str) -> Option<&PeerCursor> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 333 |     pub fn peer_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 338 |     pub fn update_visibility(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 345 |     pub fn cursors_on_line(&self, line: usize) -> Vec<&PeerCursor> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 353 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SessionState` is never used
[INFO] [stdout]   --> src/collab/session.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum SessionState {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PeerInfo` is never constructed
[INFO] [stdout]   --> src/collab/session.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct PeerInfo {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SessionConfig` is never constructed
[INFO] [stdout]   --> src/collab/session.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub struct SessionConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CollabSession` is never constructed
[INFO] [stdout]   --> src/collab/session.rs:58:12
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub struct CollabSession {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/collab/session.rs:71:12
[INFO] [stdout]     |
[INFO] [stdout]  69 | impl CollabSession {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  70 |     /// Create a new disconnected session.
[INFO] [stdout]  71 |     pub fn new(name: &str) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  91 |     pub fn state(&self) -> SessionState {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub fn is_active(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn session_id(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn peers(&self) -> &[PeerInfo] {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn peer_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fn local_peer(&self) -> &PeerInfo {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 121 |     pub fn update_cursor(&mut self, pos: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn host(&mut self) -> String {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn join(&mut self, session_id: &str) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub fn on_connected(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 146 |     pub fn on_peer_joined(&mut self, peer: PeerInfo) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     pub fn on_peer_left(&mut self, peer_id: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 160 |     pub fn on_peer_cursor(&mut self, peer_id: &str, pos: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     pub fn disconnect(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_session_id` is never used
[INFO] [stdout]    --> src/collab/session.rs:175:4
[INFO] [stdout]     |
[INFO] [stdout] 175 | fn generate_session_id() -> String {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CollabMode` is never used
[INFO] [stdout]   --> src/collab/sync.rs:15:10
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub enum CollabMode {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CollabSync` is never constructed
[INFO] [stdout]   --> src/collab/sync.rs:26:12
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct CollabSync {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/collab/sync.rs:49:12
[INFO] [stdout]     |
[INFO] [stdout]  47 | impl CollabSync {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]  48 |     /// Create a new collaboration sync handler.
[INFO] [stdout]  49 |     pub fn new(name: &str) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  65 |     pub fn mode(&self) -> CollabMode {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  70 |     pub fn is_active(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  75 |     pub fn session(&self) -> &CollabSession {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  80 |     pub fn session_mut(&mut self) -> &mut CollabSession {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn document(&self) -> &Arc<RwLock<CollabDocument>> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub async fn host(&mut self, content: &str) -> std::io::Result<String> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  95 |     pub async fn host_on_port(&mut self, content: &str, port: u16) -> std::io::Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 134 |     pub async fn join(&mut self, addr: &str, session_id: &str) -> std::io::Result<()> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 151 |     pub fn disconnect(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     pub async fn local_insert(&mut self, pos: usize, text: &str) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub async fn local_delete(&mut self, pos: usize, len: usize) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 186 |     pub async fn apply_remote(&mut self, op: Operation) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn update_cursor(&mut self, pos: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     pub fn broadcast_cursor(&self, pos: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 220 |     async fn broadcast_operation(&self, op: Operation) {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 237 |     pub fn take_event_receiver(&mut self) -> Option<mpsc::Receiver<NetworkEvent>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 242 |     pub async fn handle_event(&mut self, event: NetworkEvent) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 272 |     pub async fn content(&self) -> String {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 278 |     pub fn peer_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 283 |     pub fn peers(&self) -> &[PeerInfo] {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `OpBatcher` is never constructed
[INFO] [stdout]    --> src/collab/sync.rs:289:12
[INFO] [stdout]     |
[INFO] [stdout] 289 | pub struct OpBatcher {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `add`, `should_flush`, `flush`, `pending`, and `compact` are never used
[INFO] [stdout]    --> src/collab/sync.rs:302:12
[INFO] [stdout]     |
[INFO] [stdout] 300 | impl OpBatcher {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] 301 |     /// Create a new operation batcher.
[INFO] [stdout] 302 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 312 |     pub fn add(&mut self, op: Operation) {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 317 |     pub fn should_flush(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 324 |     pub fn flush(&mut self) -> Vec<Operation> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 330 |     pub fn pending(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 335 |     pub fn compact(&mut self) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CollabRenderState` is never constructed
[INFO] [stdout]   --> src/collab_ui.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct CollabRenderState {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PeerDisplay` is never constructed
[INFO] [stdout]   --> src/collab_ui.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct PeerDisplay {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_collab_status` is never used
[INFO] [stdout]   --> src/collab_ui.rs:65:8
[INFO] [stdout]    |
[INFO] [stdout] 65 | pub fn render_collab_status(state: &CollabRenderState) -> Vec<Span<'static>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_peer_list` is never used
[INFO] [stdout]    --> src/collab_ui.rs:106:8
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub fn render_peer_list(frame: &mut Frame, state: &CollabRenderState) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_host_dialog` is never used
[INFO] [stdout]    --> src/collab_ui.rs:158:8
[INFO] [stdout]     |
[INFO] [stdout] 158 | pub fn render_host_dialog(frame: &mut Frame, session_id: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_join_dialog` is never used
[INFO] [stdout]    --> src/collab_ui.rs:203:8
[INFO] [stdout]     |
[INFO] [stdout] 203 | pub fn render_join_dialog(frame: &mut Frame, input: &str, status: Option<&str>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_remote_cursors` is never used
[INFO] [stdout]    --> src/collab_ui.rs:250:8
[INFO] [stdout]     |
[INFO] [stdout] 250 | pub fn render_remote_cursors(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_next_peer_color` is never used
[INFO] [stdout]    --> src/collab_ui.rs:303:8
[INFO] [stdout]     |
[INFO] [stdout] 303 | pub fn get_next_peer_color(peer_index: usize) -> CursorColor {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `centered_rect` is never used
[INFO] [stdout]    --> src/collab_ui.rs:308:4
[INFO] [stdout]     |
[INFO] [stdout] 308 | fn centered_rect(percent_x: u16, percent_y: u16, area: Rect) -> Rect {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `CollabHost`, `CollabJoin`, and `CollabDisconnect` are never constructed
[INFO] [stdout]   --> src/input.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub enum Action {
[INFO] [stdout]    |          ------ variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 49 |     CollabHost,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 50 |     CollabJoin,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 51 |     CollabDisconnect,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Action` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `crdt` is never read
[INFO] [stdout]   --> src/collab/crdt.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct CollabDocument {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] 34 |     /// The underlying CRDT.
[INFO] [stdout] 35 |     crdt: ListCRDT,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `operations_since` is never used
[INFO] [stdout]    --> src/collab/crdt.rs:138:12
[INFO] [stdout]     |
[INFO] [stdout]  42 | impl CollabDocument {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub fn operations_since(&self, _since_version: u64) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_PORT` is never used
[INFO] [stdout]   --> src/collab/network.rs:20:11
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub const DEFAULT_PORT: u16 = 7878;
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Connected`, `ConnectionFailed`, and `DocumentReceived` are never constructed
[INFO] [stdout]   --> src/collab/network.rs:80:5
[INFO] [stdout]    |
[INFO] [stdout] 70 | pub enum NetworkEvent {
[INFO] [stdout]    |          ------------ variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 80 |     Connected(PeerInfo),
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 81 |     /// Connection failed.
[INFO] [stdout] 82 |     ConnectionFailed(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 83 |     /// Host sent document state.
[INFO] [stdout] 84 |     DocumentReceived(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `NetworkEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `info` and `tx` are never read
[INFO] [stdout]   --> src/collab/network.rs:90:5
[INFO] [stdout]    |
[INFO] [stdout] 89 | struct PeerConnection {
[INFO] [stdout]    |        -------------- fields in this struct
[INFO] [stdout] 90 |     info: PeerInfo,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 91 |     tx: mpsc::Sender<PeerMessage>,
[INFO] [stdout]    |     ^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PeerConnection` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `local_peer`, `peers`, and `event_tx` are never read
[INFO] [stdout]    --> src/collab/network.rs:99:5
[INFO] [stdout]     |
[INFO] [stdout]  95 | pub struct NetworkServer {
[INFO] [stdout]     |            ------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout]  99 |     local_peer: PeerInfo,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     peers: Arc<RwLock<HashMap<String, PeerConnection>>>,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     event_tx: mpsc::Sender<NetworkEvent>,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `peer_count`, `start`, `send_cursor`, `handle_connection`, and `run_connection` are never used
[INFO] [stdout]    --> src/collab/network.rs:138:18
[INFO] [stdout]     |
[INFO] [stdout] 112 | impl NetworkServer {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub async fn peer_count(&self) -> usize {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub async fn start(&mut self, port: u16) -> io::Result<SocketAddr> {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 208 |     pub fn send_cursor(&self, position: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 215 |     fn handle_connection(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 242 |     async fn run_connection(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `local_peer` and `event_tx` are never read
[INFO] [stdout]    --> src/collab/network.rs:378:5
[INFO] [stdout]     |
[INFO] [stdout] 376 | pub struct NetworkClient {
[INFO] [stdout]     |            ------------- fields in this struct
[INFO] [stdout] 377 |     /// Local peer info.
[INFO] [stdout] 378 |     local_peer: PeerInfo,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 382 |     event_tx: mpsc::Sender<NetworkEvent>,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `connect` and `send_cursor` are never used
[INFO] [stdout]    --> src/collab/network.rs:399:18
[INFO] [stdout]     |
[INFO] [stdout] 387 | impl NetworkClient {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 399 |     pub async fn connect(&mut self, addr: &str, session_id: &str) -> io::Result<()> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 518 |     pub async fn send_cursor(&self, position: usize) {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `selection` is never read
[INFO] [stdout]    --> src/collab/presence.rs:172:9
[INFO] [stdout]     |
[INFO] [stdout] 164 | pub struct PeerCursor {
[INFO] [stdout]     |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub selection: Option<Selection>,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `PeerCursor` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `update_selection`, `is_stale`, and `check_visibility` are never used
[INFO] [stdout]    --> src/collab/presence.rs:203:12
[INFO] [stdout]     |
[INFO] [stdout] 181 | impl PeerCursor {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 203 |     pub fn update_selection(&mut self, selection: Option<Selection>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn is_stale(&self, timeout: Duration) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 214 |     pub fn check_visibility(&mut self, timeout: Duration) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `local_selection` and `stale_timeout` are never read
[INFO] [stdout]    --> src/collab/presence.rs:228:5
[INFO] [stdout]     |
[INFO] [stdout] 222 | pub struct PresenceManager {
[INFO] [stdout]     |            --------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 228 |     local_selection: Option<Selection>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 234 |     stale_timeout: Duration,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `local_selection`, `update_local_selection`, `all_peers`, and `update_visibility` are never used
[INFO] [stdout]    --> src/collab/presence.rs:259:12
[INFO] [stdout]     |
[INFO] [stdout] 239 | impl PresenceManager {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 259 |     pub fn local_selection(&self) -> Option<Selection> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 278 |     pub fn update_local_selection(&mut self, selection: Option<Selection>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 323 |     pub fn all_peers(&self) -> Vec<&PeerCursor> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 338 |     pub fn update_visibility(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `port` and `name` are never read
[INFO] [stdout]   --> src/collab/session.rs:40:9
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub struct SessionConfig {
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] 39 |     /// Port to listen on when hosting.
[INFO] [stdout] 40 |     pub port: u16,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 41 |     /// Display name for this peer.
[INFO] [stdout] 42 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SessionConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `event_rx`, `event_tx`, and `last_cursor` are never read
[INFO] [stdout]   --> src/collab/sync.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct CollabSync {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 38 |     event_rx: Option<mpsc::Receiver<NetworkEvent>>,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 39 |     /// Event sender (used internally).
[INFO] [stdout] 40 |     event_tx: mpsc::Sender<NetworkEvent>,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     last_cursor: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/collab/sync.rs:75:12
[INFO] [stdout]     |
[INFO] [stdout]  47 | impl CollabSync {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  75 |     pub fn session(&self) -> &CollabSession {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  80 |     pub fn session_mut(&mut self) -> &mut CollabSession {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn document(&self) -> &Arc<RwLock<CollabDocument>> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub async fn host(&mut self, content: &str) -> std::io::Result<String> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  95 |     pub async fn host_on_port(&mut self, content: &str, port: u16) -> std::io::Result<String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 134 |     pub async fn join(&mut self, addr: &str, session_id: &str) -> std::io::Result<()> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn update_cursor(&mut self, pos: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     pub fn broadcast_cursor(&self, pos: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 237 |     pub fn take_event_receiver(&mut self) -> Option<mpsc::Receiver<NetworkEvent>> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `peers`, `show_peer_list`, `show_host_dialog`, `show_join_dialog`, `join_input`, and `status_message` are never read
[INFO] [stdout]   --> src/collab_ui.rs:27:9
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct CollabRenderState {
[INFO] [stdout]    |            ----------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub peers: Vec<PeerDisplay>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 28 |     /// Show peer list overlay.
[INFO] [stdout] 29 |     pub show_peer_list: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 30 |     /// Show host dialog.
[INFO] [stdout] 31 |     pub show_host_dialog: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 32 |     /// Show join dialog.
[INFO] [stdout] 33 |     pub show_join_dialog: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 34 |     /// Join dialog input.
[INFO] [stdout] 35 |     pub join_input: String,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 36 |     /// Connection status message.
[INFO] [stdout] 37 |     pub status_message: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CollabRenderState` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `color` is never read
[INFO] [stdout]   --> src/collab_ui.rs:50:9
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct PeerDisplay {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub color: CursorColor,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PeerDisplay` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_peer_list` is never used
[INFO] [stdout]    --> src/collab_ui.rs:106:8
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub fn render_peer_list(frame: &mut Frame, state: &CollabRenderState) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_host_dialog` is never used
[INFO] [stdout]    --> src/collab_ui.rs:158:8
[INFO] [stdout]     |
[INFO] [stdout] 158 | pub fn render_host_dialog(frame: &mut Frame, session_id: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_join_dialog` is never used
[INFO] [stdout]    --> src/collab_ui.rs:203:8
[INFO] [stdout]     |
[INFO] [stdout] 203 | pub fn render_join_dialog(frame: &mut Frame, input: &str, status: Option<&str>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_remote_cursors` is never used
[INFO] [stdout]    --> src/collab_ui.rs:250:8
[INFO] [stdout]     |
[INFO] [stdout] 250 | pub fn render_remote_cursors(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `CollabHost`, `CollabJoin`, and `CollabDisconnect` are never constructed
[INFO] [stdout]   --> src/input.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub enum Action {
[INFO] [stdout]    |          ------ variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 49 |     CollabHost,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 50 |     CollabJoin,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 51 |     CollabDisconnect,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Action` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 12.00s
[INFO] running `Command { std: "docker" "inspect" "b370fe577205db1c4206204af193aca40180a04bdaeb976d1716926352acc486", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "b370fe577205db1c4206204af193aca40180a04bdaeb976d1716926352acc486", kill_on_drop: false }`
[INFO] [stdout] b370fe577205db1c4206204af193aca40180a04bdaeb976d1716926352acc486
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 1fea3a8d8e2d835f0237624a7e85a070d55530b5b67eec620b63808e7a3f9003
[INFO] running `Command { std: "docker" "start" "-a" "1fea3a8d8e2d835f0237624a7e85a070d55530b5b67eec620b63808e7a3f9003", kill_on_drop: false }`
[INFO] [stderr] warning: unused imports: `CollabDocument`, `OperationType`, and `Operation`
[INFO] [stderr]   --> src/collab/mod.rs:12:16
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub use crdt::{CollabDocument, Operation, OperationType};
[INFO] [stderr]    |                ^^^^^^^^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `DEFAULT_PORT`, `NetworkClient`, `NetworkEvent`, `NetworkServer`, and `PeerMessage`
[INFO] [stderr]   --> src/collab/mod.rs:13:19
[INFO] [stderr]    |
[INFO] [stderr] 13 | pub use network::{NetworkClient, NetworkEvent, NetworkServer, PeerMessage, DEFAULT_PORT};
[INFO] [stderr]    |                   ^^^^^^^^^^^^^  ^^^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `CursorPosition`, `PresenceManager`, and `Selection`
[INFO] [stderr]   --> src/collab/mod.rs:15:18
[INFO] [stderr]    |
[INFO] [stderr] 15 |     CursorColor, CursorPosition, PeerCursor, PresenceManager, Selection, PEER_COLORS,
[INFO] [stderr]    |                  ^^^^^^^^^^^^^^              ^^^^^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `CollabSession`, `PeerInfo`, `SessionConfig`, and `SessionState`
[INFO] [stderr]   --> src/collab/mod.rs:17:19
[INFO] [stderr]    |
[INFO] [stderr] 17 | pub use session::{CollabSession, PeerInfo, SessionConfig, SessionState};
[INFO] [stderr]    |                   ^^^^^^^^^^^^^  ^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `CollabSync` and `OpBatcher`
[INFO] [stderr]   --> src/collab/mod.rs:18:28
[INFO] [stderr]    |
[INFO] [stderr] 18 | pub use sync::{CollabMode, CollabSync, OpBatcher};
[INFO] [stderr]    |                            ^^^^^^^^^^  ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `OperationType` is never used
[INFO] [stderr]   --> src/collab/crdt.rs:10:10
[INFO] [stderr]    |
[INFO] [stderr] 10 | pub enum OperationType {
[INFO] [stderr]    |          ^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Operation` is never constructed
[INFO] [stderr]   --> src/collab/crdt.rs:19:12
[INFO] [stderr]    |
[INFO] [stderr] 19 | pub struct Operation {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `CollabDocument` is never constructed
[INFO] [stderr]   --> src/collab/crdt.rs:33:12
[INFO] [stderr]    |
[INFO] [stderr] 33 | pub struct CollabDocument {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/collab/crdt.rs:44:12
[INFO] [stderr]     |
[INFO] [stderr]  42 | impl CollabDocument {
[INFO] [stderr]     | ------------------- associated items in this implementation
[INFO] [stderr]  43 |     /// Create a new empty collaborative document.
[INFO] [stderr]  44 |     pub fn new() -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  53 |     pub fn with_content(initial: &str) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  62 |     pub fn content(&self) -> &str {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  67 |     pub fn len(&self) -> usize {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  72 |     pub fn is_empty(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  77 |     pub fn insert(&mut self, pos: usize, text: &str) -> Operation {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  94 |     pub fn delete(&mut self, pos: usize, len: usize) -> Option<Operation> {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 116 |     pub fn apply_remote(&mut self, op: &Operation) {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 133 |     pub fn version(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 138 |     pub fn operations_since(&self, _since_version: u64) -> Vec<u8> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `DEFAULT_PORT` is never used
[INFO] [stderr]   --> src/collab/network.rs:20:11
[INFO] [stderr]    |
[INFO] [stderr] 20 | pub const DEFAULT_PORT: u16 = 7878;
[INFO] [stderr]    |           ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `PeerMessage` is never used
[INFO] [stderr]   --> src/collab/network.rs:24:10
[INFO] [stderr]    |
[INFO] [stderr] 24 | pub enum PeerMessage {
[INFO] [stderr]    |          ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `to_json_line` and `from_json` are never used
[INFO] [stderr]   --> src/collab/network.rs:56:12
[INFO] [stderr]    |
[INFO] [stderr] 54 | impl PeerMessage {
[INFO] [stderr]    | ---------------- associated items in this implementation
[INFO] [stderr] 55 |     /// Serialize to JSON line (newline-delimited).
[INFO] [stderr] 56 |     pub fn to_json_line(&self) -> Result<String, serde_json::Error> {
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 63 |     pub fn from_json(json: &str) -> Result<Self, serde_json::Error> {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `NetworkEvent` is never used
[INFO] [stderr]   --> src/collab/network.rs:70:10
[INFO] [stderr]    |
[INFO] [stderr] 70 | pub enum NetworkEvent {
[INFO] [stderr]    |          ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `PeerConnection` is never constructed
[INFO] [stderr]   --> src/collab/network.rs:89:8
[INFO] [stderr]    |
[INFO] [stderr] 89 | struct PeerConnection {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `NetworkServer` is never constructed
[INFO] [stderr]   --> src/collab/network.rs:95:12
[INFO] [stderr]    |
[INFO] [stderr] 95 | pub struct NetworkServer {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/collab/network.rs:114:12
[INFO] [stderr]     |
[INFO] [stderr] 112 | impl NetworkServer {
[INFO] [stderr]     | ------------------ associated items in this implementation
[INFO] [stderr] 113 |     /// Create a new network server.
[INFO] [stderr] 114 |     pub fn new(
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 132 |     pub async fn set_document(&self, content: String) {
[INFO] [stderr]     |                  ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 138 |     pub async fn peer_count(&self) -> usize {
[INFO] [stderr]     |                  ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 143 |     pub async fn start(&mut self, port: u16) -> io::Result<SocketAddr> {
[INFO] [stderr]     |                  ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 191 |     pub fn stop(&mut self) {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 198 |     pub fn broadcast(&self, msg: PeerMessage) {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 203 |     pub fn send_operation(&self, op: Operation) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 208 |     pub fn send_cursor(&self, position: usize) {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 215 |     fn handle_connection(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 242 |     async fn run_connection(
[INFO] [stderr]     |              ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `NetworkClient` is never constructed
[INFO] [stderr]    --> src/collab/network.rs:376:12
[INFO] [stderr]     |
[INFO] [stderr] 376 | pub struct NetworkClient {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `connect`, `disconnect`, `send_operation`, `send_cursor`, and `is_connected` are never used
[INFO] [stderr]    --> src/collab/network.rs:389:12
[INFO] [stderr]     |
[INFO] [stderr] 387 | impl NetworkClient {
[INFO] [stderr]     | ------------------ associated items in this implementation
[INFO] [stderr] 388 |     /// Create a new network client.
[INFO] [stderr] 389 |     pub fn new(local_peer: PeerInfo, event_tx: mpsc::Sender<NetworkEvent>) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 399 |     pub async fn connect(&mut self, addr: &str, session_id: &str) -> io::Result<()> {
[INFO] [stderr]     |                  ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 503 |     pub fn disconnect(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 511 |     pub async fn send_operation(&self, op: Operation) {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 518 |     pub async fn send_cursor(&self, position: usize) {
[INFO] [stderr]     |                  ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 530 |     pub fn is_connected(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `CursorPosition` is never constructed
[INFO] [stderr]   --> src/collab/presence.rs:13:12
[INFO] [stderr]    |
[INFO] [stderr] 13 | pub struct CursorPosition {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated functions `new`, `from_offset`, and `from_offset_in_text` are never used
[INFO] [stderr]   --> src/collab/presence.rs:24:12
[INFO] [stderr]    |
[INFO] [stderr] 22 | impl CursorPosition {
[INFO] [stderr]    | ------------------- associated functions in this implementation
[INFO] [stderr] 23 |     /// Create a new cursor position.
[INFO] [stderr] 24 |     pub fn new(line: usize, column: usize, offset: usize) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 29 |     pub fn from_offset(offset: usize) -> Self {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 38 |     pub fn from_offset_in_text(offset: usize, text: &str) -> Self {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Selection` is never constructed
[INFO] [stderr]   --> src/collab/presence.rs:67:12
[INFO] [stderr]    |
[INFO] [stderr] 67 | pub struct Selection {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `is_empty`, `len`, and `normalized` are never used
[INFO] [stderr]   --> src/collab/presence.rs:76:12
[INFO] [stderr]    |
[INFO] [stderr] 74 | impl Selection {
[INFO] [stderr]    | -------------- associated items in this implementation
[INFO] [stderr] 75 |     /// Create a new selection.
[INFO] [stderr] 76 |     pub fn new(start: CursorPosition, end: CursorPosition) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 81 |     pub fn is_empty(&self) -> bool {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 86 |     pub fn len(&self) -> usize {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 95 |     pub fn normalized(&self) -> Self {
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `CursorColor` is never constructed
[INFO] [stderr]    --> src/collab/presence.rs:109:12
[INFO] [stderr]     |
[INFO] [stderr] 109 | pub struct CursorColor {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `to_ansi256`, and `contrasting_text` are never used
[INFO] [stderr]    --> src/collab/presence.rs:120:18
[INFO] [stderr]     |
[INFO] [stderr] 118 | impl CursorColor {
[INFO] [stderr]     | ---------------- associated items in this implementation
[INFO] [stderr] 119 |     /// Create a new color.
[INFO] [stderr] 120 |     pub const fn new(r: u8, g: u8, b: u8) -> Self {
[INFO] [stderr]     |                  ^^^
[INFO] [stderr] ...
[INFO] [stderr] 125 |     pub fn to_ansi256(&self) -> u8 {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 134 |     pub fn contrasting_text(&self) -> CursorColor {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `PEER_COLORS` is never used
[INFO] [stderr]    --> src/collab/presence.rs:146:11
[INFO] [stderr]     |
[INFO] [stderr] 146 | pub const PEER_COLORS: [CursorColor; 8] = [
[INFO] [stderr]     |           ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_peer_color` is never used
[INFO] [stderr]    --> src/collab/presence.rs:158:8
[INFO] [stderr]     |
[INFO] [stderr] 158 | pub fn get_peer_color(index: usize) -> CursorColor {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `PeerCursor` is never constructed
[INFO] [stderr]    --> src/collab/presence.rs:164:12
[INFO] [stderr]     |
[INFO] [stderr] 164 | pub struct PeerCursor {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `update_position`, `update_selection`, `is_stale`, and `check_visibility` are never used
[INFO] [stderr]    --> src/collab/presence.rs:183:12
[INFO] [stderr]     |
[INFO] [stderr] 181 | impl PeerCursor {
[INFO] [stderr]     | --------------- associated items in this implementation
[INFO] [stderr] 182 |     /// Create a new peer cursor.
[INFO] [stderr] 183 |     pub fn new(peer_id: String, name: String, color_index: usize) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 196 |     pub fn update_position(&mut self, position: CursorPosition) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 203 |     pub fn update_selection(&mut self, selection: Option<Selection>) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 209 |     pub fn is_stale(&self, timeout: Duration) -> bool {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 214 |     pub fn check_visibility(&mut self, timeout: Duration) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `PresenceManager` is never constructed
[INFO] [stderr]    --> src/collab/presence.rs:222:12
[INFO] [stderr]     |
[INFO] [stderr] 222 | pub struct PresenceManager {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/collab/presence.rs:241:12
[INFO] [stderr]     |
[INFO] [stderr] 239 | impl PresenceManager {
[INFO] [stderr]     | -------------------- associated items in this implementation
[INFO] [stderr] 240 |     /// Create a new presence manager.
[INFO] [stderr] 241 |     pub fn new() -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 254 |     pub fn local_position(&self) -> CursorPosition {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 259 |     pub fn local_selection(&self) -> Option<Selection> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 265 |     pub fn update_local(&mut self, position: CursorPosition) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 278 |     pub fn update_local_selection(&mut self, selection: Option<Selection>) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 283 |     pub fn force_broadcast(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 288 |     pub fn add_peer(&mut self, peer_id: String, name: String) {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 298 |     pub fn remove_peer(&mut self, peer_id: &str) {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 303 |     pub fn update_peer(&mut self, peer_id: &str, offset: usize, text: &str) {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 311 |     pub fn update_peer_position(&mut self, peer_id: &str, position: CursorPosition) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 318 |     pub fn visible_peers(&self) -> Vec<&PeerCursor> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 323 |     pub fn all_peers(&self) -> Vec<&PeerCursor> {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 328 |     pub fn get_peer(&self, peer_id: &str) -> Option<&PeerCursor> {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 333 |     pub fn peer_count(&self) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 338 |     pub fn update_visibility(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 345 |     pub fn cursors_on_line(&self, line: usize) -> Vec<&PeerCursor> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 353 |     pub fn clear(&mut self) {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `SessionState` is never used
[INFO] [stderr]   --> src/collab/session.rs:10:10
[INFO] [stderr]    |
[INFO] [stderr] 10 | pub enum SessionState {
[INFO] [stderr]    |          ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `PeerInfo` is never constructed
[INFO] [stderr]   --> src/collab/session.rs:23:12
[INFO] [stderr]    |
[INFO] [stderr] 23 | pub struct PeerInfo {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `SessionConfig` is never constructed
[INFO] [stderr]   --> src/collab/session.rs:38:12
[INFO] [stderr]    |
[INFO] [stderr] 38 | pub struct SessionConfig {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `CollabSession` is never constructed
[INFO] [stderr]   --> src/collab/session.rs:58:12
[INFO] [stderr]    |
[INFO] [stderr] 58 | pub struct CollabSession {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/collab/session.rs:71:12
[INFO] [stderr]     |
[INFO] [stderr]  69 | impl CollabSession {
[INFO] [stderr]     | ------------------ associated items in this implementation
[INFO] [stderr]  70 |     /// Create a new disconnected session.
[INFO] [stderr]  71 |     pub fn new(name: &str) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  91 |     pub fn state(&self) -> SessionState {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  96 |     pub fn is_active(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 101 |     pub fn session_id(&self) -> Option<&str> {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 106 |     pub fn peers(&self) -> &[PeerInfo] {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 111 |     pub fn peer_count(&self) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 116 |     pub fn local_peer(&self) -> &PeerInfo {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 121 |     pub fn update_cursor(&mut self, pos: usize) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 126 |     pub fn host(&mut self) -> String {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 135 |     pub fn join(&mut self, session_id: &str) {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 141 |     pub fn on_connected(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 146 |     pub fn on_peer_joined(&mut self, peer: PeerInfo) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 155 |     pub fn on_peer_left(&mut self, peer_id: &str) {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 160 |     pub fn on_peer_cursor(&mut self, peer_id: &str, pos: usize) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 167 |     pub fn disconnect(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `generate_session_id` is never used
[INFO] [stderr]    --> src/collab/session.rs:175:4
[INFO] [stderr]     |
[INFO] [stderr] 175 | fn generate_session_id() -> String {
[INFO] [stderr]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `CollabMode` is never used
[INFO] [stderr]   --> src/collab/sync.rs:15:10
[INFO] [stderr]    |
[INFO] [stderr] 15 | pub enum CollabMode {
[INFO] [stderr]    |          ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `CollabSync` is never constructed
[INFO] [stderr]   --> src/collab/sync.rs:26:12
[INFO] [stderr]    |
[INFO] [stderr] 26 | pub struct CollabSync {
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/collab/sync.rs:49:12
[INFO] [stderr]     |
[INFO] [stderr]  47 | impl CollabSync {
[INFO] [stderr]     | --------------- associated items in this implementation
[INFO] [stderr]  48 |     /// Create a new collaboration sync handler.
[INFO] [stderr]  49 |     pub fn new(name: &str) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  65 |     pub fn mode(&self) -> CollabMode {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr]  70 |     pub fn is_active(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  75 |     pub fn session(&self) -> &CollabSession {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  80 |     pub fn session_mut(&mut self) -> &mut CollabSession {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  85 |     pub fn document(&self) -> &Arc<RwLock<CollabDocument>> {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  90 |     pub async fn host(&mut self, content: &str) -> std::io::Result<String> {
[INFO] [stderr]     |                  ^^^^
[INFO] [stderr] ...
[INFO] [stderr]  95 |     pub async fn host_on_port(&mut self, content: &str, port: u16) -> std::io::Result<String> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 134 |     pub async fn join(&mut self, addr: &str, session_id: &str) -> std::io::Result<()> {
[INFO] [stderr]     |                  ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 151 |     pub fn disconnect(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 164 |     pub async fn local_insert(&mut self, pos: usize, text: &str) {
[INFO] [stderr]     |                  ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 174 |     pub async fn local_delete(&mut self, pos: usize, len: usize) {
[INFO] [stderr]     |                  ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 186 |     pub async fn apply_remote(&mut self, op: Operation) {
[INFO] [stderr]     |                  ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 192 |     pub fn update_cursor(&mut self, pos: usize) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 203 |     pub fn broadcast_cursor(&self, pos: usize) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 220 |     async fn broadcast_operation(&self, op: Operation) {
[INFO] [stderr]     |              ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 237 |     pub fn take_event_receiver(&mut self) -> Option<mpsc::Receiver<NetworkEvent>> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 242 |     pub async fn handle_event(&mut self, event: NetworkEvent) {
[INFO] [stderr]     |                  ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 272 |     pub async fn content(&self) -> String {
[INFO] [stderr]     |                  ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 278 |     pub fn peer_count(&self) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 283 |     pub fn peers(&self) -> &[PeerInfo] {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `OpBatcher` is never constructed
[INFO] [stderr]    --> src/collab/sync.rs:289:12
[INFO] [stderr]     |
[INFO] [stderr] 289 | pub struct OpBatcher {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `add`, `should_flush`, `flush`, `pending`, and `compact` are never used
[INFO] [stderr]    --> src/collab/sync.rs:302:12
[INFO] [stderr]     |
[INFO] [stderr] 300 | impl OpBatcher {
[INFO] [stderr]     | -------------- associated items in this implementation
[INFO] [stderr] 301 |     /// Create a new operation batcher.
[INFO] [stderr] 302 |     pub fn new() -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 312 |     pub fn add(&mut self, op: Operation) {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 317 |     pub fn should_flush(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 324 |     pub fn flush(&mut self) -> Vec<Operation> {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 330 |     pub fn pending(&self) -> usize {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 335 |     pub fn compact(&mut self) {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `CollabRenderState` is never constructed
[INFO] [stderr]   --> src/collab_ui.rs:17:12
[INFO] [stderr]    |
[INFO] [stderr] 17 | pub struct CollabRenderState {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `PeerDisplay` is never constructed
[INFO] [stderr]   --> src/collab_ui.rs:42:12
[INFO] [stderr]    |
[INFO] [stderr] 42 | pub struct PeerDisplay {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `render_collab_status` is never used
[INFO] [stderr]   --> src/collab_ui.rs:65:8
[INFO] [stderr]    |
[INFO] [stderr] 65 | pub fn render_collab_status(state: &CollabRenderState) -> Vec<Span<'static>> {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `render_peer_list` is never used
[INFO] [stderr]    --> src/collab_ui.rs:106:8
[INFO] [stderr]     |
[INFO] [stderr] 106 | pub fn render_peer_list(frame: &mut Frame, state: &CollabRenderState) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `render_host_dialog` is never used
[INFO] [stderr]    --> src/collab_ui.rs:158:8
[INFO] [stderr]     |
[INFO] [stderr] 158 | pub fn render_host_dialog(frame: &mut Frame, session_id: &str) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `render_join_dialog` is never used
[INFO] [stderr]    --> src/collab_ui.rs:203:8
[INFO] [stderr]     |
[INFO] [stderr] 203 | pub fn render_join_dialog(frame: &mut Frame, input: &str, status: Option<&str>) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `render_remote_cursors` is never used
[INFO] [stderr]    --> src/collab_ui.rs:250:8
[INFO] [stderr]     |
[INFO] [stderr] 250 | pub fn render_remote_cursors(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_next_peer_color` is never used
[INFO] [stderr]    --> src/collab_ui.rs:303:8
[INFO] [stderr]     |
[INFO] [stderr] 303 | pub fn get_next_peer_color(peer_index: usize) -> CursorColor {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `centered_rect` is never used
[INFO] [stderr]    --> src/collab_ui.rs:308:4
[INFO] [stderr]     |
[INFO] [stderr] 308 | fn centered_rect(percent_x: u16, percent_y: u16, area: Rect) -> Rect {
[INFO] [stderr]     |    ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variants `CollabHost`, `CollabJoin`, and `CollabDisconnect` are never constructed
[INFO] [stderr]   --> src/input.rs:49:5
[INFO] [stderr]    |
[INFO] [stderr] 15 | pub enum Action {
[INFO] [stderr]    |          ------ variants in this enum
[INFO] [stderr] ...
[INFO] [stderr] 49 |     CollabHost,
[INFO] [stderr]    |     ^^^^^^^^^^
[INFO] [stderr] 50 |     CollabJoin,
[INFO] [stderr]    |     ^^^^^^^^^^
[INFO] [stderr] 51 |     CollabDisconnect,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `Action` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: `hollow` (bin "hollow") generated 51 warnings (run `cargo fix --bin "hollow" -p hollow` to apply 5 suggestions)
[INFO] [stderr] warning: field `crdt` is never read
[INFO] [stderr]   --> src/collab/crdt.rs:35:5
[INFO] [stderr]    |
[INFO] [stderr] 33 | pub struct CollabDocument {
[INFO] [stderr]    |            -------------- field in this struct
[INFO] [stderr] 34 |     /// The underlying CRDT.
[INFO] [stderr] 35 |     crdt: ListCRDT,
[INFO] [stderr]    |     ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: method `operations_since` is never used
[INFO] [stderr]    --> src/collab/crdt.rs:138:12
[INFO] [stderr]     |
[INFO] [stderr]  42 | impl CollabDocument {
[INFO] [stderr]     | ------------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 138 |     pub fn operations_since(&self, _since_version: u64) -> Vec<u8> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variants `Connected`, `ConnectionFailed`, and `DocumentReceived` are never constructed
[INFO] [stderr]   --> src/collab/network.rs:80:5
[INFO] [stderr]    |
[INFO] [stderr] 70 | pub enum NetworkEvent {
[INFO] [stderr]    |          ------------ variants in this enum
[INFO] [stderr] ...
[INFO] [stderr] 80 |     Connected(PeerInfo),
[INFO] [stderr]    |     ^^^^^^^^^
[INFO] [stderr] 81 |     /// Connection failed.
[INFO] [stderr] 82 |     ConnectionFailed(String),
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^
[INFO] [stderr] 83 |     /// Host sent document state.
[INFO] [stderr] 84 |     DocumentReceived(String),
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `NetworkEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `info` and `tx` are never read
[INFO] [stderr]   --> src/collab/network.rs:90:5
[INFO] [stderr]    |
[INFO] [stderr] 89 | struct PeerConnection {
[INFO] [stderr]    |        -------------- fields in this struct
[INFO] [stderr] 90 |     info: PeerInfo,
[INFO] [stderr]    |     ^^^^
[INFO] [stderr] 91 |     tx: mpsc::Sender<PeerMessage>,
[INFO] [stderr]    |     ^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `PeerConnection` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `local_peer`, `peers`, and `event_tx` are never read
[INFO] [stderr]    --> src/collab/network.rs:99:5
[INFO] [stderr]     |
[INFO] [stderr]  95 | pub struct NetworkServer {
[INFO] [stderr]     |            ------------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr]  99 |     local_peer: PeerInfo,
[INFO] [stderr]     |     ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 103 |     peers: Arc<RwLock<HashMap<String, PeerConnection>>>,
[INFO] [stderr]     |     ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 107 |     event_tx: mpsc::Sender<NetworkEvent>,
[INFO] [stderr]     |     ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `peer_count`, `start`, `send_cursor`, `handle_connection`, and `run_connection` are never used
[INFO] [stderr]    --> src/collab/network.rs:138:18
[INFO] [stderr]     |
[INFO] [stderr] 112 | impl NetworkServer {
[INFO] [stderr]     | ------------------ associated items in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 138 |     pub async fn peer_count(&self) -> usize {
[INFO] [stderr]     |                  ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 143 |     pub async fn start(&mut self, port: u16) -> io::Result<SocketAddr> {
[INFO] [stderr]     |                  ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 208 |     pub fn send_cursor(&self, position: usize) {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 215 |     fn handle_connection(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 242 |     async fn run_connection(
[INFO] [stderr]     |              ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `local_peer` and `event_tx` are never read
[INFO] [stderr]    --> src/collab/network.rs:378:5
[INFO] [stderr]     |
[INFO] [stderr] 376 | pub struct NetworkClient {
[INFO] [stderr]     |            ------------- fields in this struct
[INFO] [stderr] 377 |     /// Local peer info.
[INFO] [stderr] 378 |     local_peer: PeerInfo,
[INFO] [stderr]     |     ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 382 |     event_tx: mpsc::Sender<NetworkEvent>,
[INFO] [stderr]     |     ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `connect` and `send_cursor` are never used
[INFO] [stderr]    --> src/collab/network.rs:399:18
[INFO] [stderr]     |
[INFO] [stderr] 387 | impl NetworkClient {
[INFO] [stderr]     | ------------------ methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 399 |     pub async fn connect(&mut self, addr: &str, session_id: &str) -> io::Result<()> {
[INFO] [stderr]     |                  ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 518 |     pub async fn send_cursor(&self, position: usize) {
[INFO] [stderr]     |                  ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `selection` is never read
[INFO] [stderr]    --> src/collab/presence.rs:172:9
[INFO] [stderr]     |
[INFO] [stderr] 164 | pub struct PeerCursor {
[INFO] [stderr]     |            ---------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 172 |     pub selection: Option<Selection>,
[INFO] [stderr]     |         ^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `PeerCursor` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `update_selection`, `is_stale`, and `check_visibility` are never used
[INFO] [stderr]    --> src/collab/presence.rs:203:12
[INFO] [stderr]     |
[INFO] [stderr] 181 | impl PeerCursor {
[INFO] [stderr]     | --------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 203 |     pub fn update_selection(&mut self, selection: Option<Selection>) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 209 |     pub fn is_stale(&self, timeout: Duration) -> bool {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 214 |     pub fn check_visibility(&mut self, timeout: Duration) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `local_selection` and `stale_timeout` are never read
[INFO] [stderr]    --> src/collab/presence.rs:228:5
[INFO] [stderr]     |
[INFO] [stderr] 222 | pub struct PresenceManager {
[INFO] [stderr]     |            --------------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 228 |     local_selection: Option<Selection>,
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 234 |     stale_timeout: Duration,
[INFO] [stderr]     |     ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `local_selection`, `update_local_selection`, `all_peers`, and `update_visibility` are never used
[INFO] [stderr]    --> src/collab/presence.rs:259:12
[INFO] [stderr]     |
[INFO] [stderr] 239 | impl PresenceManager {
[INFO] [stderr]     | -------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 259 |     pub fn local_selection(&self) -> Option<Selection> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 278 |     pub fn update_local_selection(&mut self, selection: Option<Selection>) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 323 |     pub fn all_peers(&self) -> Vec<&PeerCursor> {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 338 |     pub fn update_visibility(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `port` and `name` are never read
[INFO] [stderr]   --> src/collab/session.rs:40:9
[INFO] [stderr]    |
[INFO] [stderr] 38 | pub struct SessionConfig {
[INFO] [stderr]    |            ------------- fields in this struct
[INFO] [stderr] 39 |     /// Port to listen on when hosting.
[INFO] [stderr] 40 |     pub port: u16,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr] 41 |     /// Display name for this peer.
[INFO] [stderr] 42 |     pub name: String,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `SessionConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `event_rx`, `event_tx`, and `last_cursor` are never read
[INFO] [stderr]   --> src/collab/sync.rs:38:5
[INFO] [stderr]    |
[INFO] [stderr] 26 | pub struct CollabSync {
[INFO] [stderr]    |            ---------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 38 |     event_rx: Option<mpsc::Receiver<NetworkEvent>>,
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr] 39 |     /// Event sender (used internally).
[INFO] [stderr] 40 |     event_tx: mpsc::Sender<NetworkEvent>,
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 44 |     last_cursor: usize,
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple methods are never used
[INFO] [stderr]    --> src/collab/sync.rs:75:12
[INFO] [stderr]     |
[INFO] [stderr]  47 | impl CollabSync {
[INFO] [stderr]     | --------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  75 |     pub fn session(&self) -> &CollabSession {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  80 |     pub fn session_mut(&mut self) -> &mut CollabSession {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  85 |     pub fn document(&self) -> &Arc<RwLock<CollabDocument>> {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  90 |     pub async fn host(&mut self, content: &str) -> std::io::Result<String> {
[INFO] [stderr]     |                  ^^^^
[INFO] [stderr] ...
[INFO] [stderr]  95 |     pub async fn host_on_port(&mut self, content: &str, port: u16) -> std::io::Result<String> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 134 |     pub async fn join(&mut self, addr: &str, session_id: &str) -> std::io::Result<()> {
[INFO] [stderr]     |                  ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 192 |     pub fn update_cursor(&mut self, pos: usize) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 203 |     pub fn broadcast_cursor(&self, pos: usize) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 237 |     pub fn take_event_receiver(&mut self) -> Option<mpsc::Receiver<NetworkEvent>> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `peers`, `show_peer_list`, `show_host_dialog`, `show_join_dialog`, `join_input`, and `status_message` are never read
[INFO] [stderr]   --> src/collab_ui.rs:27:9
[INFO] [stderr]    |
[INFO] [stderr] 17 | pub struct CollabRenderState {
[INFO] [stderr]    |            ----------------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 27 |     pub peers: Vec<PeerDisplay>,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr] 28 |     /// Show peer list overlay.
[INFO] [stderr] 29 |     pub show_peer_list: bool,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^
[INFO] [stderr] 30 |     /// Show host dialog.
[INFO] [stderr] 31 |     pub show_host_dialog: bool,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^
[INFO] [stderr] 32 |     /// Show join dialog.
[INFO] [stderr] 33 |     pub show_join_dialog: bool,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^
[INFO] [stderr] 34 |     /// Join dialog input.
[INFO] [stderr] 35 |     pub join_input: String,
[INFO] [stderr]    |         ^^^^^^^^^^
[INFO] [stderr] 36 |     /// Connection status message.
[INFO] [stderr] 37 |     pub status_message: Option<String>,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `CollabRenderState` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `color` is never read
[INFO] [stderr]   --> src/collab_ui.rs:50:9
[INFO] [stderr]    |
[INFO] [stderr] 42 | pub struct PeerDisplay {
[INFO] [stderr]    |            ----------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 50 |     pub color: CursorColor,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `PeerDisplay` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: `hollow` (bin "hollow" test) generated 28 warnings (11 duplicates)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.42s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/hollow-96903dafa78552d4)
[INFO] [stdout] 
[INFO] [stdout] running 230 tests
[INFO] [stdout] test collab::crdt::tests::test_apply_remote_insert ... ok
[INFO] [stdout] test collab::crdt::tests::test_apply_remote_delete ... ok
[INFO] [stdout] test collab::crdt::tests::test_delete ... ok
[INFO] [stdout] test collab::crdt::tests::test_delete_at_end ... ok
[INFO] [stdout] test collab::crdt::tests::test_insert ... ok
[INFO] [stdout] test collab::crdt::tests::test_insert_middle ... ok
[INFO] [stdout] test collab::crdt::tests::test_new_document ... ok
[INFO] [stdout] test collab::crdt::tests::test_version_increments ... ok
[INFO] [stdout] test collab::crdt::tests::test_with_content ... ok
[INFO] [stdout] test collab::network::tests::test_cursor_message ... ok
[INFO] [stdout] test collab::network::tests::test_client_creation ... ok
[INFO] [stdout] test collab::network::tests::test_join_message ... ok
[INFO] [stdout] test collab::network::tests::test_join_ack_message ... ok
[INFO] [stdout] test collab::network::tests::test_peer_message_serialize ... ok
[INFO] [stdout] test collab::network::tests::test_peer_joined_message ... ok
[INFO] [stdout] test collab::presence::tests::test_cursor_color_ansi256 ... ok
[INFO] [stdout] test collab::presence::tests::test_cursor_position_default ... ok
[INFO] [stdout] test collab::presence::tests::test_cursor_position_from_text ... ok
[INFO] [stdout] test collab::network::tests::test_join_reject_message ... ok
[INFO] [stdout] test collab::network::tests::test_peer_left_message ... ok
[INFO] [stdout] test collab::presence::tests::test_cursor_position_from_offset ... ok
[INFO] [stdout] test collab::network::tests::test_server_document ... ok
[INFO] [stdout] test collab::presence::tests::test_different_peer_colors ... ok
[INFO] [stdout] test collab::presence::tests::test_cursor_color_contrasting ... ok
[INFO] [stdout] test collab::presence::tests::test_peer_cursor_new ... ok
[INFO] [stdout] test collab::network::tests::test_server_creation ... ok
[INFO] [stdout] test collab::presence::tests::test_presence_manager_clear ... ok
[INFO] [stdout] test collab::network::tests::test_peer_message_deserialize ... ok
[INFO] [stdout] test collab::crdt::tests::test_delete_empty ... ok
[INFO] [stdout] test collab::network::tests::test_operation_message ... ok
[INFO] [stdout] test collab::presence::tests::test_peer_cursor_update ... ok
[INFO] [stdout] test collab::presence::tests::test_presence_manager_cursors_on_line ... ok
[INFO] [stdout] test collab::presence::tests::test_presence_manager_add_peer ... ok
[INFO] [stdout] test collab::presence::tests::test_presence_manager_new ... ok
[INFO] [stdout] test collab::presence::tests::test_peer_colors ... ok
[INFO] [stdout] test collab::presence::tests::test_presence_manager_visible_peers ... ok
[INFO] [stdout] test collab::presence::tests::test_presence_manager_remove_peer ... ok
[INFO] [stdout] test collab::presence::tests::test_selection_normalized ... ok
[INFO] [stdout] test collab::presence::tests::test_presence_manager_update_local ... ok
[INFO] [stdout] test collab::crdt::tests::test_delete_beyond_length ... ok
[INFO] [stdout] test collab::presence::tests::test_selection_empty ... ok
[INFO] [stdout] test collab::presence::tests::test_selection_length ... ok
[INFO] [stdout] test collab::session::tests::test_host_session ... ok
[INFO] [stdout] test collab::session::tests::test_join_session ... ok
[INFO] [stdout] test collab::sync::tests::test_handle_disconnect_event ... ok
[INFO] [stdout] test collab::sync::tests::test_handle_cursor_event ... ok
[INFO] [stdout] test collab::session::tests::test_new_session ... ok
[INFO] [stdout] test collab::session::tests::test_cursor_update ... ok
[INFO] [stdout] test collab::sync::tests::test_collab_mode ... ok
[INFO] [stdout] test collab::session::tests::test_disconnect ... ok
[INFO] [stdout] test collab::sync::tests::test_handle_operation_event ... ok
[INFO] [stdout] test collab::session::tests::test_peer_cursor_update ... ok
[INFO] [stdout] test collab::sync::tests::test_host_session ... ok
[INFO] [stdout] test collab::sync::tests::test_apply_remote ... ok
[INFO] [stdout] test collab::session::tests::test_peer_left ... ok
[INFO] [stdout] test collab::session::tests::test_session_id_format ... ok
[INFO] [stdout] test collab::sync::tests::test_handle_peer_event ... ok
[INFO] [stdout] test collab::sync::tests::test_op_batcher_flush ... ok
[INFO] [stdout] test collab_ui::tests::test_collab_render_state_default ... ok
[INFO] [stdout] test collab::presence::tests::test_presence_manager_update_peer ... ok
[INFO] [stdout] test config::tests::test_cli_overrides ... ok
[INFO] [stdout] test collab_ui::tests::test_render_collab_status_inactive ... ok
[INFO] [stdout] test config::tests::test_default_config ... ok
[INFO] [stdout] test config::tests::test_load_returns_defaults_when_no_file ... ok
[INFO] [stdout] test config::tests::test_parse_partial_toml ... ok
[INFO] [stdout] test config::tests::test_validation_auto_save ... ok
[INFO] [stdout] test config::tests::test_validation_clamps_tab_width ... ok
[INFO] [stdout] test config::tests::test_validation_clamps_text_width ... ok
[INFO] [stdout] test editor::tests::test_copy_paste ... ok
[INFO] [stdout] test editor::tests::test_delete_char_at_start_does_nothing ... ok
[INFO] [stdout] test collab_ui::tests::test_get_next_peer_color ... ok
[INFO] [stdout] test collab_ui::tests::test_render_collab_status_host ... ok
[INFO] [stdout] test editor::tests::test_delete_char_backspace ... ok
[INFO] [stdout] test config::tests::test_parse_valid_toml ... ok
[INFO] [stdout] test collab::sync::tests::test_op_batcher_should_flush_by_size ... ok
[INFO] [stdout] test collab::session::tests::test_peer_management ... ok
[INFO] [stdout] test collab::sync::tests::test_local_delete ... ok
[INFO] [stdout] test collab::sync::tests::test_op_batcher_compact ... ok
[INFO] [stdout] test collab::sync::tests::test_op_batcher_compact_different_agents ... ok
[INFO] [stdout] test collab::sync::tests::test_op_batcher_add ... ok
[INFO] [stdout] test collab::sync::tests::test_local_insert ... ok
[INFO] [stdout] test editor::tests::test_delete_char_joins_lines ... ok
[INFO] [stdout] test editor::tests::test_insert_char ... ok
[INFO] [stdout] test editor::tests::test_delete_line ... ok
[INFO] [stdout] test collab_ui::tests::test_centered_rect ... ok
[INFO] [stdout] test editor::tests::test_delete_char_forward ... ok
[INFO] [stdout] test editor::tests::test_move_left_right ... ok
[INFO] [stdout] test editor::tests::test_move_document_start_end ... ok
[INFO] [stdout] test editor::tests::test_move_line_start_end ... ok
[INFO] [stdout] test editor::tests::test_insert_newline ... ok
[INFO] [stdout] test editor::tests::test_move_up_down ... ok
[INFO] [stdout] test editor::tests::test_new_editor_is_empty ... ok
[INFO] [stdout] test collab_ui::tests::test_peer_display_from_cursor ... ok
[INFO] [stdout] test editor::tests::test_paragraph_movement ... ok
[INFO] [stdout] test editor::tests::test_undo_redo ... ok
[INFO] [stdout] test editor::tests::test_word_count ... ok
[INFO] [stdout] test export::tests::test_extract_title ... ok
[INFO] [stdout] test export::tests::test_html_escape ... ok
[INFO] [stdout] test export::tests::test_markdown_to_html_basic ... ok
[INFO] [stdout] test focus::tests::test_focus_stats_completion_rate ... ok
[INFO] [stdout] test focus::tests::test_focus_stats_empty ... ok
[INFO] [stdout] test focus::tests::test_focus_stats_focus_percentage ... ok
[INFO] [stdout] test export::tests::test_markdown_to_html_code ... ok
[INFO] [stdout] test export::tests::test_markdown_to_html_links ... ok
[INFO] [stdout] test focus::tests::test_focus_session_score_with_idle ... ok
[INFO] [stdout] test focus::tests::test_focus_session_score_perfect ... ok
[INFO] [stdout] test focus::tests::test_focus_session_new ... ok
[INFO] [stdout] test export::tests::test_export_to_html ... ok
[INFO] [stdout] test export::tests::test_default_css_included ... ok
[INFO] [stdout] test export::tests::test_export_with_custom_title ... ok
[INFO] [stdout] test focus::tests::test_timer_long_break_after_4_periods ... ok
[INFO] [stdout] test focus::tests::test_timer_start_break ... ok
[INFO] [stdout] test focus::tests::test_timer_stop ... ok
[INFO] [stdout] test focus::tests::test_focus_session_score_with_interruptions ... ok
[INFO] [stdout] test focus::tests::test_timer_start_work ... ok
[INFO] [stdout] test focus::tests::test_focus_session_total_minutes ... ok
[INFO] [stdout] test focus::tests::test_timer_state_is_active ... ok
[INFO] [stdout] test focus::tests::test_tracker_idle_detection ... ok
[INFO] [stdout] test focus::tests::test_timer_state_is_work ... ok
[INFO] [stdout] test collab::sync::tests::test_op_batcher_new ... ok
[INFO] [stdout] test collab_ui::tests::test_render_collab_status_client ... ok
[INFO] [stdout] test input::tests::test_arrow_keys_move ... ok
[INFO] [stdout] test focus::tests::test_timer_pause_resume ... ok
[INFO] [stdout] test input::tests::test_ctrl_dot_shows_spell_suggestions ... ok
[INFO] [stdout] test input::tests::test_ctrl_s_saves ... ok
[INFO] [stdout] test focus::tests::test_tracker_get_history ... ok
[INFO] [stdout] test input::tests::test_ctrl_z_undoes ... ok
[INFO] [stdout] test input::tests::test_ctrl_semicolon_toggles_spell ... ok
[INFO] [stdout] test input::tests::test_dd_deletes_line ... ok
[INFO] [stdout] test input::tests::test_escape_enters_navigate ... ok
[INFO] [stdout] test input::tests::test_gg_moves_to_start ... ok
[INFO] [stdout] test input::tests::test_help_in_navigate ... ok
[INFO] [stdout] test focus::tests::test_tracker_get_stats ... ok
[INFO] [stdout] test focus::tests::test_tracker_start_session ... ok
[INFO] [stdout] test input::tests::test_ctrl_q_quits ... ok
[INFO] [stdout] test input::tests::test_char_inserts_in_write_mode ... ok
[INFO] [stdout] test focus::tests::test_timer_format_remaining ... ok
[INFO] [stdout] test input::tests::test_i_enters_write ... ok
[INFO] [stdout] test input::tests::test_vim_movement_in_navigate ... ok
[INFO] [stdout] test input::tests::test_yy_copies_line ... ok
[INFO] [stdout] test project::tests::test_add_document ... ok
[INFO] [stdout] test project::tests::test_count_words ... ok
[INFO] [stdout] test project::tests::test_new_project ... ok
[INFO] [stdout] test project::tests::test_remove_document ... ok
[INFO] [stdout] test project::tests::test_resolve_document ... ok
[INFO] [stdout] test project::tests::test_project_stats ... ok
[INFO] [stdout] test search::tests::test_all_matches ... ok
[INFO] [stdout] test search::tests::test_find_case_insensitive ... ok
[INFO] [stdout] test search::tests::test_find_exact_match ... ok
[INFO] [stdout] test search::tests::test_find_no_match ... ok
[INFO] [stdout] test search::tests::test_empty_query_returns_none ... ok
[INFO] [stdout] test search::tests::test_find_prev_wrap ... ok
[INFO] [stdout] test search::tests::test_new_search_is_empty ... ok
[INFO] [stdout] test search::tests::test_find_wrap_around ... ok
[INFO] [stdout] test search::tests::test_clear ... ok
[INFO] [stdout] test search::tests::test_set_query ... ok
[INFO] [stdout] test search::tests::test_find_prev ... ok
[INFO] [stdout] test project::tests::test_save_and_load ... ok
[INFO] [stdout] test session::tests::test_words_written ... ok
[INFO] [stdout] test session::tests::test_words_written_negative_is_zero ... ok
[INFO] [stdout] test spell::tests::test_misspelling_struct ... ok
[INFO] [stdout] test session::tests::test_elapsed_formatting_minutes ... ok
[INFO] [stdout] test input::tests::test_search_mode ... ok
[INFO] [stdout] test spell::tests::test_check_word_without_dict ... ok
[INFO] [stdout] test session::tests::test_elapsed_increases ... ok
[INFO] [stdout] test session::tests::test_new_session ... ok
[INFO] [stdout] test stats::tests::test_goal_met ... ok
[INFO] [stdout] test stats::tests::test_longest_streak ... ok
[INFO] [stdout] test stats::tests::test_progress_calculation ... ok
[INFO] [stdout] test stats::tests::test_record_and_get_words ... ok
[INFO] [stdout] test stats::tests::test_record_session ... ok
[INFO] [stdout] test stats::tests::test_streak_broken ... ok
[INFO] [stdout] test stats::tests::test_streak_calculation ... ok
[INFO] [stdout] test focus::tests::test_pomodoro_config_default ... ok
[INFO] [stdout] test focus::tests::test_timer_state_display ... ok
[INFO] [stdout] test focus::tests::test_tracker_end_session ... ok
[INFO] [stdout] test stats::tests::test_export_json ... ok
[INFO] [stdout] test stats::tests::test_goal_disabled ... ok
[INFO] [stdout] test sync::tests::test_conflict_resolution_enum ... ok
[INFO] [stdout] test stats::tests::test_writing_stats_averages ... ok
[INFO] [stdout] test sync::tests::test_status_not_initialized ... ok
[INFO] [stdout] test sync::tests::test_sync_config_default ... ok
[INFO] [stdout] test sync::tests::test_sync_error_display ... ok
[INFO] [stdout] test theme::tests::test_dark_theme ... ok
[INFO] [stdout] test theme::tests::test_default_theme ... ok
[INFO] [stdout] test theme::tests::test_from_name ... ok
[INFO] [stdout] test theme::tests::test_light_theme ... ok
[INFO] [stdout] test theme::tests::test_named_color_case_insensitive ... ok
[INFO] [stdout] test theme::tests::test_named_colors ... ok
[INFO] [stdout] test theme::tests::test_presets_list ... ok
[INFO] [stdout] test theme::tests::test_rgb_color ... ok
[INFO] [stdout] test theme::tests::test_sepia_theme ... ok
[INFO] [stdout] test theme::tests::test_solarized_theme ... ok
[INFO] [stdout] test theme::tests::test_unknown_named_color_defaults_to_reset ... ok
[INFO] [stdout] test versions::tests::test_compress_decompress ... ok
[INFO] [stdout] test sync::tests::test_init_repository ... ok
[INFO] [stdout] test sync::tests::test_add_remote ... ok
[INFO] [stdout] test sync::tests::test_status_clean_empty_repo ... ok
[INFO] [stdout] test versions::tests::test_diff_additions ... ok
[INFO] [stdout] test versions::tests::test_compress_large_text ... ok
[INFO] [stdout] test sync::tests::test_commit ... ok
[INFO] [stdout] test versions::tests::test_diff_modifications ... ok
[INFO] [stdout] test versions::tests::test_diff_deletions ... ok
[INFO] [stdout] test versions::tests::test_version_preview ... ok
[INFO] [stdout] test sync::tests::test_status_modified ... ok
[INFO] [stdout] test voice::tests::test_parse_command_case_insensitive ... ok
[INFO] [stdout] test voice::tests::test_parse_command_editing ... ok
[INFO] [stdout] test voice::tests::test_parse_command_insert ... ok
[INFO] [stdout] test versions::tests::test_word_count ... ok
[INFO] [stdout] test voice::tests::test_parse_command_mode ... ok
[INFO] [stdout] test voice::tests::test_parse_command_navigation ... ok
[INFO] [stdout] test voice::tests::test_voice_command_to_action ... ok
[INFO] [stdout] test voice::tests::test_voice_config_default ... ok
[INFO] [stdout] test voice::tests::test_voice_error_display ... ok
[INFO] [stdout] test versions::tests::test_save_and_get_version ... ok
[INFO] [stdout] test voice::tests::test_voice_command_to_action_types ... ok
[INFO] [stdout] test versions::tests::test_content_differs ... ok
[INFO] [stdout] test versions::tests::test_prune_old_versions ... ok
[INFO] [stdout] test voice::tests::test_whisper_model_display ... ok
[INFO] [stdout] test versions::tests::test_get_versions_ordered ... ok
[INFO] [stdout] test spell::tests::test_word_at_position ... ok
[INFO] [stdout] test spell::tests::test_word_at_position_with_apostrophe ... ok
[INFO] [stdout] test spell::tests::test_personal_dictionary ... ok
[INFO] [stdout] test spell::tests::test_spell_checker_creation ... ok
[INFO] [stdout] test spell::tests::test_toggle ... ok
[INFO] [stdout] test spell::tests::test_check_line_disabled ... ok
[INFO] [stdout] test spell::tests::test_single_char_words_ignored ... ok
[INFO] [stdout] test spell::tests::test_suggest_without_dict ... ok
[INFO] [stdout] test spell::tests::test_add_to_personal ... ok
[INFO] [stdout] test spell::tests::test_check_text_empty ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 230 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.34s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/integration_test.rs (/opt/rustwide/target/debug/deps/integration_test-97a0017f71fc9bfa)
[INFO] [stdout] 
[INFO] [stdout] running 14 tests
[INFO] [stdout] test config_integration::test_config_dir_exists ... ok
[INFO] [stdout] test editor_integration::test_empty_file ... ok
[INFO] [stdout] test editor_integration::test_multiline_content ... ok
[INFO] [stdout] test editor_integration::test_large_file ... ok
[INFO] [stdout] test editor_integration::test_new_file_creation ... ok
[INFO] [stdout] test editor_integration::test_create_edit_save_cycle ... ok
[INFO] [stdout] test editor_integration::test_nested_directory_creation ... ok
[INFO] [stdout] test word_count::test_word_count_empty ... ok
[INFO] [stdout] test editor_integration::test_special_characters ... ok
[INFO] [stdout] test editor_integration::test_unicode_content ... ok
[INFO] [stdout] test word_count::test_word_count_multiline ... ok
[INFO] [stdout] test word_count::test_word_count_only_whitespace ... ok
[INFO] [stdout] test word_count::test_word_count_simple ... ok
[INFO] [stdout] test word_count::test_word_count_extra_whitespace ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 14 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "1fea3a8d8e2d835f0237624a7e85a070d55530b5b67eec620b63808e7a3f9003", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "1fea3a8d8e2d835f0237624a7e85a070d55530b5b67eec620b63808e7a3f9003", kill_on_drop: false }`
[INFO] [stdout] 1fea3a8d8e2d835f0237624a7e85a070d55530b5b67eec620b63808e7a3f9003
